const gameCfg = require("../../config/gameCfg");

class HdcjMd {
    constructor() {
        this.hdcjCfg = {
            rewards:[ //奖品列表
                {
                    idx: 1, //奖品索引
                    rdType:gameCfg.RewardType.Type_Quan,//奖品类型
                    rdNun: 10, //奖品数量
                    probability: 15 //抽中概率
                },
                {
                    idx: 2,
                    rdType:gameCfg.RewardType.TYpe_QiuNum,//奖品类型
                    rdNun: 40, //奖品数量
                    probability: 15 //抽中概率
                },
                {
                    idx: 3,
                    rdType:gameCfg.RewardType.Type_Quan,//奖品类型
                    rdNun: 20, //奖品数量
                    probability: 10 //抽中概率
                },
                {
                    idx: 4,
                    rdType:gameCfg.RewardType.TYpe_QiuNum,//奖品类型
                    rdNun: 50, //奖品数量
                    probability: 25 //抽中概率
                },
                {
                    idx: 5,
                    rdType:gameCfg.RewardType.Type_Quan,//奖品类型
                    rdNun: 30, //奖品数量
                    probability: 20, //抽中概率
                },
                {
                    idx: 6,
                    rdType:gameCfg.RewardType.TYpe_QiuNum,//奖品类型
                    rdNun: 60, //奖品数量
                    probability: 15 //抽中概率
                }
            ],
            price: 10 //单次抽奖价格
        }
    }

    static getInstance(){
        if(!HdcjMd.instance){
            HdcjMd.instance = new HdcjMd();
            return HdcjMd.instance;
        }else{
            return HdcjMd.instance;
        }
    }

    //获取抽奖的配置
    getCjCfg(){
        let res = this.hdcjCfg;
        // let cfg = await global.hallSerMgr.hallRedis.getChouJiangCfg();
        // if(!cfg){
        //     await global.hallSerMgr.hallRedis.setChouJiangCfg(this.hdcjCfg);
        //     res = cfg;
        // }else{
        //     res = cfg;
        // }

        return res;
    }

    getRandomArbitrary(min, max) {
        return Math.random() * (max - min) + min;
    }

    weightedRandom(weights) {
        let sum = 0;
        const weightsArray = [];

        for (let i = 0; i < weights.length; i++) {
            sum += weights[i].probability;
            weightsArray.push(sum/100);
        }
        sum = sum/100;

        const random = this.getRandomArbitrary(0, sum);
        for (let i = 0; i < weightsArray.length; i++) {
            if (random < weightsArray[i]) {
                return weights[i];
            }
        }

        return weights[weights.length - 1]; // 应该不会执行到这里，除非weights数组有问题
    }
}

module.exports = HdcjMd.getInstance();